BMI(身體質量指數)是用自己身高、體重的比例,來當作是否過胖的「身高體重指數」
它的計算方法也很簡單
BMI = 體重(公斤)/身高平方(公尺)
台灣人體重習慣以公斤為單位所以沒問題
但要注意的是台灣身高幾乎都以公分為單位,這邊需要把公分轉為公尺再來做計算
人的標準BMI是介於18.5≦BMI<24之間
我們就來用之前學過得技術
做出BMI計算機八
我們需要的元件有:
TextView x 3 (體重(公斤) x1 、身高(公分) x1 、診斷結果)
Button x 1 (計算 x1)
EditText x 2 (體重輸入欄 x1 、身高輸入欄 x1)
使用者輸入身高時,只需要以公分輸入,我們會寫程式把公分轉為公尺,好讓用戶方便使用
我們先把頁面刻好
id設置:
體重的EditText:et_weight
身高的EditText:et_height
計算的Button:btn_cale
顯示結果的TextView:tv_result
這邊要注意:必須把EditText的inputType設成number
這樣才不會有輸入數字之外的字
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dp"
android:layout_weight=".2"
android:layout_height="wrap_content"
android:text="體重kg:"
android:textAlignment="center"
android:textSize="15dp"/>
<EditText
android:id="@+id/et_weight"
android:layout_width="0dp"
android:inputType="number"
android:layout_weight=".8"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dp"
android:layout_weight=".2"
android:layout_height="wrap_content"
android:text="身高cm:"
android:textAlignment="center"
android:textSize="15dp"/>
<EditText
android:id="@+id/et_height"
android:layout_width="0dp"
android:inputType="number"
android:layout_weight=".8"
android:layout_height="wrap_content"/>
</LinearLayout>
<Button
android:id="@+id/btn_cale"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="計算"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textSize="30dp"
android:text="BMI:"
android:textAlignment="center"/>
</LinearLayout>
除了體重、身高的TextView不用宣告外,其餘的皆會使用到,所以必須宣告
並且抓取物件
EditText et_weight = findViewById(R.id.et_weight);
EditText et_height = findViewById(R.id.et_height);
Button btn_cale = findViewById(R.id.btn_cale);
TextView tv_result = findViewById(R.id.tv_result);
不管事抓EditText的值,或是最後BMI的結果都是再按下按鈕後才會執行
所以把所有的程式都寫在按鈕點擊事件內就好
btn_cale.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
先抓到EditText體重和身高的值
運算BMI:體重(公斤)/身高平方(公尺)顯示BMI的值
然後判斷你BMI顯示過高或過低
package com.example.bmi;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.text.NumberFormat;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText et_weight = findViewById(R.id.et_weight);
EditText et_height = findViewById(R.id.et_height);
Button btn_cale = findViewById(R.id.btn_cale);
TextView tv_result = findViewById(R.id.tv_result);
btn_cale.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(et_weight.getText().length()!=0||et_weight.getText().length()!=0){
float weight = Float.parseFloat(et_weight.getText().toString());
float height = Float.parseFloat(et_height.getText().toString());
float bmi = weight/((height/100)*(height/100));
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(2);
tv_result.setText("BMI:"+numberFormat.format(bmi));
if(bmi<18.5){
tv_result.setText(tv_result.getText()+"\n太瘦");
}
else if(bmi>=24){
tv_result.setText(tv_result.getText()+"\n太胖拉");
}
else if (bmi<24&& bmi>=18.5){
tv_result.setText(tv_result.getText()+"\n完美體態");
}
}
else{
Toast.makeText(MainActivity.this,"請輸入身高/體重",Toast.LENGTH_SHORT).show();
}
}
});
}
}
執行結果: